/**
 * <p>
 * 版权所有：中企动力
 * </p>
 * <p>
 * 未经本公司许可，不得以任何方式复制或使用本程序任何部分
 * </p>
 */
package com.ce.pms.report.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ce.pms.report.dao.IReportDao;
import com.ce.pms.report.queryvo.ClientArrearageBuildingListQueryVO;
import com.ce.pms.report.vo.BaseReportVo;
import com.ce.pms.report.vo.ClientArrearageBuildingListVo;
import com.ce.pms.report.vo.ClientArrearageItemListVo;
import com.ce.report.entity.CEReportDataSet;
import com.ce.report.exception.CEReportException;
import com.ce.report.service.ICEReportDataSetService;
import com.ce.report.vo.ReportsQueryBaseVo;
import com.ce.util.BlankUtil;
import com.ce.util.DateUtil;

/**
 * 客户欠款分栋分项汇总表
 *
 * @author <a href="mailto:i0o@live.cn">黄腾飞</a>
 * @Created 2008-11-14
 */

public class ClientArrearageBuildingListService implements
		ICEReportDataSetService {

	private IReportDao reportDao;



	public CEReportDataSet getReportDataSet(ReportsQueryBaseVo arg0)
			throws CEReportException {
		ClientArrearageBuildingListQueryVO queryVO = (ClientArrearageBuildingListQueryVO) arg0;

		return new CEReportDataSet(getData(queryVO),getHeadInfo(queryVO));
	}

	/**
	 * 功能描述:获取报表列表数据 <br>
	 *
	 * @param queryVO
	 * @return Create author:黄彦军 <br>
	 *         Create on:2008-11-21 <br>
	 *         Edit author: <br>
	 *         Edit on: <br>
	 *         Why: <br>
	 */
	private List<ClientArrearageBuildingListVo> getData( ClientArrearageBuildingListQueryVO queryVO) {

		List<Object[]> temp = reportDao.getArrearageBuildingList(queryVO);
		List<ClientArrearageBuildingListVo> list = converToReportVoList(temp);

		return list;
	}

	/**
	 * 功能描述:转化对象数组 转为 VO数组  <br>
	 * @param dataList
	 * @return
	 * Create author:黄彦军 <br>
	 * Create on:2008-11-21  <br>
	 * Edit author:  <br>
	 * Edit on:    <br>
	 * Why:     <br>
	 */
	private List<ClientArrearageBuildingListVo> converToReportVoList(
			List<Object[]> dataList) {
		if (BlankUtil.isBlank(dataList))
			return null;

		List<ClientArrearageBuildingListVo> voList = new ArrayList<ClientArrearageBuildingListVo>();
		for (Object[] objTmp : dataList) {
			ClientArrearageBuildingListVo voTmp = new ClientArrearageItemListVo();

			voTmp.setCompanyName((String) objTmp[0]); 			// 物业名称
			voTmp.setBuildingName((String) objTmp[1]); 			// 大楼名称
			voTmp.setCurArrearageCount((((BigDecimal)objTmp[2]).intValue()) == 0 ? null :(BigDecimal)objTmp[2]); // 本月欠款合计
			voTmp.setCurrentCharge((((BigDecimal)objTmp[3]).intValue()) == 0 ? null :(BigDecimal)objTmp[3]); 	// 本月费用
			voTmp.setLastMonthArrearage((((BigDecimal)objTmp[4]).intValue()) == 0 ? null :(BigDecimal) objTmp[4]);// 往月欠款
			voTmp.setLatefee((((BigDecimal)objTmp[5]).intValue()) == 0 ? null :(BigDecimal) objTmp[5]); 			// 滞纳金
			voTmp.setOverheadExpenses((((BigDecimal)objTmp[6]).intValue()) == 0 ? null :(BigDecimal) objTmp[6]);  // 管理费
			voTmp.setOnticUpkeep((((BigDecimal)objTmp[7]).intValue()) == 0 ? null :(BigDecimal) objTmp[7]); 		// 本体维修基金
			voTmp.setElectricityPay((((BigDecimal)objTmp[8]).intValue()) == 0 ? null :(BigDecimal) objTmp[8]); 	// 电费
			voTmp.setWaterPay((((BigDecimal)objTmp[9]).intValue()) == 0 ? null :(BigDecimal) objTmp[9]); 			// 水费
			voTmp.setSewagePay((((BigDecimal)objTmp[10]).intValue()) == 0 ? null :(BigDecimal) objTmp[10]);		// 污水处理费
			voTmp.setGarbagePay((((BigDecimal)objTmp[11]).intValue()) == 0 ? null :(BigDecimal) objTmp[11]); 		// 垃圾处理费
			voTmp.setUpkeepPay((((BigDecimal)objTmp[12]).intValue()) == 0 ? null :(BigDecimal) objTmp[12]); 		// 维修费

			voList.add(voTmp);
		}
		return voList;
	}

	/**
	 * 功能描述:获取头信息 <br>
	 *
	 * @param queryVO
	 * @return Create author:黄彦军 <br>
	 *         Create on:2008-11-21 <br>
	 *         Edit author: <br>
	 *         Edit on: <br>
	 *         Why: <br>
	 */
	private Map<String, Object> getHeadInfo(
			ClientArrearageBuildingListQueryVO queryVO) {
		Map<String, Object> map = new HashMap<String, Object>();
		String computeMonth = DateUtil.convertDateToStr(queryVO
				.getComputeMonth(), "yyyy年MM月");
		map.put("reportHeadStr", "欠款月份：" + computeMonth);
		map.put("printDate", new Date());
		String subentry = "";
		if ("1".equals(queryVO.getSubentry())) {
			subentry = "本月费用";
		} else if ("2".equals(queryVO.getSubentry())) {
			subentry = "往月欠款";
		} else {
			subentry = "本月费用 + 往月欠款";
		}

		map.put("subentry", subentry);

		return map;
	}

	public void setReportDao(IReportDao reportDao) {
		this.reportDao = reportDao;
	}

}
